﻿/*
Copyright (C) 2008 raohmaru <http://www.raohmaru.com>

This file is part of Raohmaru AS3 Framework.

Raohmaru AS3 Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Raohmaru AS3 Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with Raohmaru AS3 Framework.  If not, see <http://www.gnu.org/licenses/>.
*/

package jp.raohmaru.net.statistics 
{
import flash.external.ExternalInterface;

/**
 * La clase GoogleAnalytics permite enviar peticiones de medición a la API de Google Analytics.
 * Una instancia de GoogleAnalytics se comunica directamente con el JavaScript ubicado en la página HTML contenedora, y envía peticiones de medición invocando al
 * método <code>pageTracker._trackPageview()</code>.<br>
 * Para que funcione la llamada al JavaScript de Google Analytics, se debe añadir al objeto Flash en la página HTML el parámetro
 * <code>allowScriptAccess</code> igual a "always".
 * @see http://code.google.com/apis/analytics/docs/flashTrackingIntro.html
 * @author raohmaru
 * @version 1.0.1
 */
public class GoogleAnalytics implements IMedition
{
	private var _url : String,
				_enabled : Boolean,
				_log : Boolean;
	

	/**
	 * La URL que se va a solicitar.
	 * @default "pageTracker._trackPageview"
	 */
	public function get url() : String
	{
		return _url;
	}
	public function set url(value : String) : void
	{
		_url = value;
	}
	
	/**
	 * Define o obtiene el estado de la instancia GoogleAnalytics. Si es <code>false</code>, se desactivarán las llamadas a <code>GoogleAnalytics.send()</code>
	 * @default true
	 */
	public function get enabled() : Boolean
	{
		return _enabled;
	}
	public function set enabled(value : Boolean) : void
	{
		_enabled = value;
	}	

	/**
	 * Define si debe mostrarse cada petición realizada con <code>GoogleAnalytics.send()</code> en la consola de salida.
	 * @default false
	 */
	public function get log() : Boolean
	{
		return _log;
	}
	public function set log(value : Boolean) : void
	{
		_log = value;
	}
	
	
	/**
	 * Crea un nuevo objeto GoogleAnalytics y define la propiedad <code>url</code> a "pageTracker._trackPageview".
	 * @param enabled Define el estado de la instancia GoogleAnalytics.
	 * @param log Define si debe mostrarse cada petición realizada con <code>GoogleAnalytics.send()</code> en la consola de salida.
	 * @param url La URL que se va a solicitar.
	 */	
	public function GoogleAnalytics(enabled :Boolean=true, log :Boolean=false, url :String="pageTracker._trackPageview")
	{
		this.enabled = enabled;		this.log = log;		this.url = url;
	}

	/**
	 * Envía una petición de medición de página vista a Google Analytics. La comunicación se establece a través de <code>ExternalInterface.call()</code>.
	 * @param data Cadena con la página a medir
	 * @see flash.external.ExternalInterface
	 * @example
	 <listing version="3.0">
	 import jp.raohmaru.net.statistics.GoogleAnalytics;	 	 var ga : GoogleAnalytics = new GoogleAnalytics();	 ga.send("/home/boton_enviar");</listing>
	 */
	public function send(data : Object) : void
	{
		if(_log) trace("GA.send  " + data);
		if(_enabled) ExternalInterface.call(url, data);
	}
}
}